CC  = c++
CXX = c++

# Partie commentée : choisissez les options que vous voulez avoir
CXXFLAGS  += -ansi -pedantic -Wall   # pour les purs et durs
# CXXFLAGS += -g                      # pour debugger
# CXXFLAGS += -pg                     # pour profiler
CXXFLAGS += -O2                     # pour optimiser la vitesse
#CXXFLAGS += -Werror -Wfatal-error

# Défitinion de quelques variables
CLASSES = Barde.o Clerc.o Druide.o Guerrier.o Mage.o Paladin.o	\
Rodeur.o Spec.o Voleur.o

RACES = DemiElfe.o DemiOgre.o DemiOrque.o Elfe.o Gnome.o Hobbit.o	\
Humain.o Nain.o


all : Prgm tests

clean:
	rm -f *.o

wipe : 
	rm -f *.o *.exe

# Les éxécutables:

Prgm : NouveauJoueur.exe EcrireJoueur.exe EvolutionJoueur.exe	\
AjouterSorts.exe ApercuJoueur.exe

NouveauJoueur.exe : Race.o $(RACES) MetaRace.o Classe.o $(CLASSES)	\
MetaClasse.o Joueur.o NouveauJoueur.o lib.o CColor.o ADD.h		\
debugstreams.o StatusCode.o Parser.o ElementDOM.o Prerequis.o		\
ListComp.o ListEnsComp.o ListCapa.o ListEnsCapa.o Sort.o SortsEcoles.o	\
ListeSorts.o Martiale.o LireNomCapa.o LireNomComp.o LireMartiale.o	\
Caracteristique.o
	$(CXX) -o $@ $^

EcrireJoueur.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o		\
EcrireJoueur.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o		\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

EvolutionJoueur.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o	\
EvolutionJoueur.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o	\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

AjouterSorts.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o		\
AjouterSorts.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o		\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

ApercuJoueur.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o		\
ApercuJoueur.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o		\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

# Tous les tests:

tests : test_guerrier.exe test_paladin.exe test_rodeur.exe		\
test_voleur.exe test_barde.exe test_clerc.exe test_druide.exe		\
test_mage.exe test_spec.exe test_race.exe test_joueur.exe		\
test_nain.exe test_gnome.exe test_xml.exe test_tex.exe test_xp.exe	\
test_arguments.exe test_sort.exe test_parser.exe test_niveaux.exe	\
test_creation.exe testMetaRace.exe testMetaClasse.exe

# Les .o par catégories

Classes : Classe.o $(CLASSES) MetaClasse.o

Races : Race.o $(RACES) MetaRace.o

# Les tests

test_guerrier.exe : Classe.o Guerrier.o test_guerrier.o lib.o		\
debugstreams.o lib.o CColor.o StatusCode.o Prerequis.o ListComp.o	\
ListEnsComp.o ListCapa.o ListEnsCapa.o Sort.o Caracteristique.o		\
#SortsEcoles.o ListeSorts.o Martiale.o
	$(CXX) -o $@ $^

test_paladin.exe : Classe.o Paladin.o test_paladin.o lib.o	\
debugstreams.o CColor.o StatusCode.o Prerequis.o ListComp.o	\
ListEnsComp.o ListCapa.o ListEnsCapa.o Martiale.o Sort.o	\
Caracteristique.o #SortsEcoles.o ListeSorts.o
	$(CXX) -o $@ $^

test_rodeur.exe : Classe.o Rodeur.o test_rodeur.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Martiale.o Sort.o Caracteristique.o #SortsEcoles.o	\
ListeSorts.o
	$(CXX) -o $@ $^

test_voleur.exe : Classe.o Voleur.o test_voleur.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Martiale.o Sort.o Caracteristique.o #SortsEcoles.o	\
ListeSorts.o
	$(CXX) -o $@ $^

test_barde.exe : Classe.o Barde.o test_barde.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
Caracteristique.o
	$(CXX) -o $@ $^

test_clerc.exe : Classe.o Clerc.o test_clerc.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Martiale.o Sort.o Caracteristique.o #SortsEcoles.o	\
ListeSorts.o
	$(CXX) -o $@ $^

test_druide.exe : Classe.o Druide.o test_druide.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Martiale.o Sort.o Caracteristique.o #SortsEcoles.o	\
ListeSorts.o
	$(CXX) -o $@ $^

test_mage.exe : Classe.o Mage.o test_mage.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
Caracteristique.o
	$(CXX) -o $@ $^

test_spec.exe : Classe.o Spec.o test_spec.o lib.o debugstreams.o	\
CColor.o StatusCode.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
Caracteristique.o
	$(CXX) -o $@ $^

test_race.exe : Race.o Humain.o test_race.o debugstreams.o lib.o CColor.o StatusCode.o Prerequis.o ListCapa.o ListEnsCapa.o Caracteristique.o #Sort.o SortsEcoles.o ListeSorts.o Martiale.o ListComp.o
	$(CXX) -o $@ $^

test_nain.exe : Race.o Nain.o test_nain.o debugstreams.o lib.o		\
CColor.o StatusCode.o Prerequis.o ListCapa.o ListEnsCapa.o		\
Caracteristique.o #ListComp.o ListEnsComp.o Sort.o SortsEcoles.o	\
ListeSorts.o Martiale.o
	$(CXX) -o $@ $^

test_gnome.exe : Race.o Gnome.o test_gnome.o debugstreams.o lib.o	\
CColor.o StatusCode.o Prerequis.o ListCapa.o ListEnsCapa.o		\
Caracteristique.o #ListComp.o ListEnsComp.o Sort.o SortsEcoles.o	\
ListeSorts.o Martiale.o
	$(CXX) -o $@ $^

test_joueur.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o		\
test_joueur.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o		\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

test_xml.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o test_xml.o	\
lib.o CColor.o ADD.h debugstreams.o StatusCode.o Parser.o ElementDOM.o	\
Prerequis.o ListComp.o ListEnsComp.o ListCapa.o ListEnsCapa.o Sort.o	\
SortsEcoles.o ListeSorts.o Martiale.o LireNomCapa.o LireNomComp.o	\
LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

test_tex.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o test_tex.o	\
lib.o CColor.o ADD.h debugstreams.o StatusCode.o Parser.o ElementDOM.o	\
Prerequis.o ListComp.o ListEnsComp.o ListCapa.o ListEnsCapa.o Sort.o	\
SortsEcoles.o ListeSorts.o Martiale.o LireNomCapa.o LireNomComp.o	\
LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

test_xp.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o test_xp.o	\
lib.o CColor.o ADD.h debugstreams.o StatusCode.o Parser.o ElementDOM.o	\
Prerequis.o ListComp.o ListEnsComp.o ListCapa.o ListEnsCapa.o Sort.o	\
SortsEcoles.o ListeSorts.o Martiale.o LireNomCapa.o LireNomComp.o	\
LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

test_arguments.exe : lib.o test_arguments.o debugstreams.o CColor.o	\
StatusCode.o Caracteristique.o #ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o
	$(CXX) -o $@ $^

test_sort.exe : lib.o test_sort.o debugstreams.o CColor.o StatusCode.o	\
Parser.o ElementDOM.o ListComp.o ListEnsComp.o ListCapa.o		\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Caracteristique.o	\
#Martiale.o
	$(CXX) -o $@ $^

test_parser.exe : test_parser.o Parser.o ElementDOM.o debugstreams.o	\
CColor.o StatusCode.o lib.o Caracteristique.o #SortsEcoles.o		\
ListeSorts.o Martiale.o ListCapa.o ListEnsCapa.o ListComp.o
	$(CXX) -o $@ $^

test_niveaux.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o		\
test_niveaux.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o		\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

test_creation.exe : Race.o $(RACES) Classe.o $(CLASSES) Joueur.o	\
test_creation.o lib.o CColor.o ADD.h debugstreams.o StatusCode.o	\
Parser.o ElementDOM.o Prerequis.o ListComp.o ListEnsComp.o ListCapa.o	\
ListEnsCapa.o Sort.o SortsEcoles.o ListeSorts.o Martiale.o		\
LireNomCapa.o LireNomComp.o LireMartiale.o Caracteristique.o
	$(CXX) -o $@ $^

testMetaRace.exe : Race.o MetaRace.o $(RACES) debugstreams.o CColor.o	\
testMetaRace.o StatusCode.o Prerequis.o ListCapa.o ListEnsCapa.o	\
Parser.o ElementDOM.o lib.o Caracteristique.o
	$(CXX) -o $@ $^

testMetaClasse.exe : Classe.o $(CLASSES) MetaClasse.o debugstreams.o	\
CColor.o testMetaClasse.o StatusCode.o Prerequis.o ListComp.o		\
ListEnsComp.o Parser.o ElementDOM.o lib.o Sort.o Caracteristique.o	\
Sort.o SortsEcoles.o ListeSorts.o
	$(CXX) -o $@ $^

test_ATL.exe : test_ATL.cc ATL.h CColor.o debugstreams.o
	$(CXX) -o $@ $^

# Les fichiers objets

%.o : src/Base/%.cc
	$(CXX) $(CXXFLAGS) -c -o $@ $^
